/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package backup;

import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import org.jdesktop.swingx.error.ErrorInfo;
import utilitarios.erros.MessagemErro;

/**
 *
 * @author GEMADA
 */
public class Backup {

    private static String VERSION = "4.0.3";
    private static String SEPARATOR = File.separator;
    //Caminho do Bin do MYSQL.
//    private static String MYSQL_PATH =
//            "C:" + SEPARATOR
//            + "Program Files" + SEPARATOR
//            + "MySQL" + SEPARATOR
//            + "MySQL Server 5.5" + SEPARATOR
//            + "bin" + SEPARATOR;
//    private static String PRESENTATION =
//            "==========================================================\n"
//            + "  Backup do banco de dados MySQL - Versao " + VERSION + "\n"
//            + "  Autor: Marcelo Carvalho Pinto da Cunha\n\n"
//            + "  Desenvolvido em 07/09/2009\n\n"
//            + "  MarcWare Software, 2009-2012\n"
//            + "==========================================================\n\n";

    /*
     * a constante da classe chamada DATABASES é uma simples String contendo os nomes dos bancos de dados a serem feitos os backups, 
     * separados por espaços. Você pode colocar quantos bancos quiser. Mais tarde, no processamento, 
     * a variável dbList colherá esses nomes de bancos para realizar os backups.
     */
    //private static String DATABASES = "eloma";
    private List<String> dbList = new ArrayList<String>();

    public Backup(String user, String password, String caminho, String banco, String path) {

        String command = path + "\\" + "mysqldump.exe";
        String[] databases = banco.split(" ");

        for (int i = 0; i < databases.length; i++) {
            dbList.add(databases[i]);
        }

        // Contador
        int i = 1;

        // Tempo
        long time1, time2, time;

        // Início
        time1 = System.currentTimeMillis();

        Date d = new Date();

        Calendar cal = Calendar.getInstance();
        cal.setTime(d);

        for (String dbName : dbList) {
            ProcessBuilder pb = new ProcessBuilder(
                    command,
                    "--user=" + user,
                    "--password=" + password,
                    dbName,
                    "--result-file=" + caminho + "\\" + dbName.toUpperCase() + "_" + cal.get(Calendar.MONTH + 1) + "_" + cal.get(Calendar.YEAR) + ".sql");
            try {

                pb.start();

            } catch (Exception e) {
                MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
            }
            i++;
        }

        // Fim
        time2 = System.currentTimeMillis();

        // Tempo total da operação
        time = time2 - time1;

        try {

            // Paralisa por 2 segundos
            Thread.sleep(2000);

        } catch (Exception e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        }
    }
}
